﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using HerGoS.Documentos.Entities;
using HerGoS.DAO;
using HerGoS.Interfaces;
using System.Data;
using HerGoS.Documentos.Exceptions;
using HerGoS.Administration.Entities;
using HerGoS.Administration.Engine;

namespace HerGoS.Documentos.Engine
{
   public class GestorClaseDocumentos
    {

       public static ClaseDocumento Obtener(int oid)
       {
           try
           {
               IRepository repo = RepositoryFactory.Create(Config.RepositoryDocumentosName);
               repo.Nombre = "CLASESDOCUMENTOS_SP";
               repo.AddParameter("@ACCION", "BYID");
               repo.AddParameter("@ID", oid);
               repo.AddParameter("@DESCRIPCION", null);
               repo.AddParameter("@ACTIVO", true);
               DataTable dt = repo.ExecuteDataTable();
               ClaseDocumento result = dt.ToGenericList<ClaseDocumento>(ClaseDocumentoConverter).FirstOrDefault();
               return result;
           }
           catch (Exception ex)
           {
               throw new TipoAccionGetException(ex);
           }
       }

       public static List<ClaseDocumento> Consultar(string descripcion, string codigo)
       {
           try
           {
               IRepository repo = RepositoryFactory.Create(Config.RepositoryDocumentosName);
               repo.Nombre = "CLASESDOCUMENTOS_SP";
               repo.AddParameter("@ACCION", "CONSULTA");
               repo.AddParameter("@ID", null);
               repo.AddParameter("@CODIGO", codigo);
               repo.AddParameter("@DESCRIPCION", descripcion);
               repo.AddParameter("@ACTIVO", true);
               DataTable dt = repo.ExecuteDataTable();
               List<ClaseDocumento> result = dt.ToGenericList<ClaseDocumento>(ClaseDocumentoConverter);
               return result;
           }
           catch (Exception ex)
           {
               throw new TipoAccionGetException(ex);
           }
       }


       public static void Guardar(ClaseDocumento claseDocumento)
       {
           try
           {
               IRepository repo = RepositoryFactory.CreateTransactional(Config.RepositoryDocumentosName);
               repo.Nombre = "CLASESDOCUMENTOS_PROC";
               repo.AddParameter("@ACCION ", claseDocumento.Persistencia);
               repo.AddParameter("@ID", claseDocumento.OID);
               repo.AddParameter("@CODIGO", claseDocumento.Codigo);
               repo.AddParameter("@DESCRIPCION", claseDocumento.Descripcion);
               repo.AddParameter("@IDUSUARIO", HGSContext.Usuario.OID);

               claseDocumento.OID = repo.ExecuteReturnValue().ToInteger();
               repo.Commit();

               GestorBitacora.Guardar(claseDocumento);

           }
           catch (Exception ex)
           {
               throw new TipoDocumentoSaveException(ex);
           }
       }

       public static void Eliminar(ClaseDocumento claseDocumento)
       {
           claseDocumento.Persistencia = EstadoPersistencia.DELETE;
           Guardar(claseDocumento);
           claseDocumento.Persistencia = EstadoPersistencia.UPDATE;
           claseDocumento.Activo = false;
       }





       
		#region Converter

        public static ClaseDocumento ClaseDocumentoConverter(DataRow row)
        {
            ClaseDocumento clase  =  new ClaseDocumento
            {
                OID = row["tclasID"].ToInteger(),
				Persistencia = EstadoPersistencia.UPDATE,
                Codigo = row["tclasCODIGO"].ToString(),
                Descripcion = row["tclasDescripcion"].ToString(),
                Activo = row.IsNull("FECHA_BAJA") ? true : false
            };

            return clase;
        }
        #endregion



    }
}
